package main

import "fmt"

// 函数作为返回值
func setup(task string) func() {
	fmt.Println("do some setup stuff for", task)

	// 使用了外部变量 task，成为一个闭包函数
	return func() {
		fmt.Println("do some teardown stuff for", task)
	}
}

func main() {
	teardown := setup("demo")
	defer teardown()

	fmt.Println("do some business stuff")
}
